"""
使用序列化器给 openid 做加密处理,返回access_token
# 安装 itsdangerous
pip install itsdangerous

使用方法:

# 导入:
from itsdangerous import TimedJSONWebSignatureSerializer

# 创建对象
obj = TimedJSONWebSignatureSerializer(秘钥, 有效期(秒))

# 1. 生成 token
# 调用对象的 dumps( ) 方法, 传入数据
token_bytes = obj.dumps({'mobile': '18512345678'})
# 返回 bytes 类型, 我们可以对其解码,得到 token
token = token_bytes.decode()


# 2. 检验 token
# 调用对象的 loads( ) 函数来进行检验
# 验证失败，会抛出itsdangerous.BadData异常
data = obj.loads(token)
"""
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from django.conf import settings
from itsdangerous import BadData


def generate_access_token_openid(openid):
    """
    序列化 openid
    :param openid: 明文
    :return: 密文字符串
    """
    # 创建序列化器
    s = Serializer(settings.SECRET_KEY, 600)
    # 构造要序列化的数据
    data = {'openid':openid}
    # 序列化
    token = s.dumps(data)
    # 返回密文字符串:将bytes转成字符串
    return token.decode()


def check_access_token_openid(access_token):
    """
    反序列化 openid
    :param access_token: 密文字符串
    :return: 明文
    """
    # 创建序列化器
    s = Serializer(settings.SECRET_KEY, 600)
    try:
        # 反序列化(解密)
        data = s.loads(access_token)
    except BadData:
        return None
    # 读取openid明文
    openid = data.get('openid')
    # 返回openid
    return openid
